#!/usr/bin/env python
# -*- coding: UTF8 	-*-

from GladeConnect import GladeConnect
import gtk
import sys
import dialogos
import debugwindow
import SimpleTree
import ifd
from strSQL.basicas import strSelectSector
from psycopg2 import connect
import completion
import comunes
import treetohtml

(CODIGO,
 DESCRIPCION,
 RUT_PROPIETARIO,
 DESCRIPCION_PROPIETARIO) = range(4)

class wnSector (GladeConnect):
    def __init__(self, conexion=None, padre=None, root = "wnSector"):
        GladeConnect.__init__(self, "glade/wnSector.glade", root)
        self.cnx = conexion
        self.cursor = self.cnx.cursor()
        self.padre = padre
        if padre is None :
            self.wnSector.maximize()
            self.frm_padre = self.wnSector
        else:
            self.frm_padre = padre.frm_padre
            
        self.crea_columnas()
        self.carga_datos()
        
    def crea_columnas(self):
        columnas = []
        columnas.append ([CODIGO, "Código","str"])
        columnas.append ([DESCRIPCION, "Sector", "str"])
        columnas.append ([RUT_PROPIETARIO, "R.U.T.", "str"])
        columnas.append ([DESCRIPCION_PROPIETARIO, "Propietario", "str"])
        
        self.modelo = gtk.ListStore(*(4*[str]))
        SimpleTree.GenColsByModel(self.modelo, columnas, self.treeSector)
        self.col_data = [x[0] for x in columnas]
        
    def on_btnImprimir_clicked(self, btn=None):
        t = treetohtml.TreeToHTML(self.treeSector,"Sector", self.col_data)
        t.show()
        
    def carga_datos(self):
        self.modelo = ifd.ListStoreFromSQL(self.cnx, strSelectSector)
        self.treeSector.set_model(self.modelo)

    def on_btnAnadir_clicked(self, btn=None, data=None):
        dlg=dlgSector(self.cnx, self.frm_padre, False)
        dlg.editando=False
        response=dlg.dlgSector.run()
        if response == gtk.RESPONSE_OK:
            self.carga_datos()
    
    def on_btnQuitar_clicked(self, btn=None):
        model, it = self.treeSector.get_selection().get_selected()
        if model is None or it is None:
            return
        codigo = model.get_value(it, CODIGO)
        sector = model.get_value(it, DESCRIPCION)
        
        if dialogos.yesno("¿Desea eliminar el sector <b>%s</b>?\n Esta acción no se puede deshacer\n" % sector, self.frm_padre) == gtk.RESPONSE_YES:
            llaves = {'codigo_sector':codigo}
            sql = ifd.deleteFromDict("traza.sector", llaves)
            try:                
                self.cursor.execute(sql, llaves)
                model.remove(it)
            except:
                print sys.exc_info()[1]
                dialogos.error("<b>NO SE PUEDE ELIMINAR</b>\nEl sector <b>%s</b>, se encuentra relacionado con un cuartel."%sector)

    def on_btnPropiedades_clicked(self, btn=None):

        model, it = self.treeSector.get_selection().get_selected()
        if model is None or it is None:
            return
        
        dlg = dlgSector(self.cnx, self.frm_padre, False)
        dlg.entCodigo.set_text(model.get_value(it, CODIGO))
        dlg.entDescripcion.set_text(model.get_value(it, DESCRIPCION))
        dlg.entPropietario.set_text(model.get_value(it, DESCRIPCION_PROPIETARIO))
        dlg.pecPropietario.set_selected(True)
        dlg.rut = model.get_value(it, RUT_PROPIETARIO)
        
        dlg.editando = True
        response = dlg.dlgSector.run()
        
        if response==gtk.RESPONSE_OK:
            self.modelo.clear()
            self.carga_datos()
            
    def on_btnCerrar_clicked(self, btn=None):
        if self.padre is None:
            self.on_exit()
        else:
            self.padre.remove_tab("Sector")
            
    def on_treeSector_row_activated(self, tree=None, path=None, col=None):
        self.on_btnPropiedades_clicked()


class dlgSector(GladeConnect):
    def __init__(self, conexion=None, padre=None, editando=None):
        GladeConnect.__init__(self, "glade/wnSector.glade", "dlgSector")
        self.cnx = conexion
        self.cursor = self.cnx.cursor()
        self.entDescripcion.grab_focus()
        
        self.editando=editando
        self.pecPropietario = completion.CompletionPropietario(self.entPropietario,
                self.sel_propietario,
                self.cnx)
        self.dlgSector.show()
        
    def sel_propietario(self, completion, model, it):
        self.rut = model.get_value(it, 1)
        
    def on_btnAceptar_clicked(self, btn=None, date=None, cnx=None):
        if self.entDescripcion.get_text() == "":
            dialogos.error("El campo <b>Descripción Sector</b> no puede estar vacío.")
            return
        
        if self.entPropietario.get_text() == "":
            dialogos.error("El campo de <b>Propietario</b> No puede estar vacío.")
            return
            
        campos = {}
        llaves = {}
        campos['descripcion_sector']  = self.entDescripcion.get_text().upper()
        campos['rut_propietario']  = self.rut
        
        if not self.editando:
            sql = ifd.insertFromDict("traza.sector", campos)
        else:
            llaves['codigo_sector'] = self.entCodigo.get_text()
            sql, campos = ifd.updateFromDict("traza.sector", campos, llaves)
            
        self.cursor.execute(sql, campos)
        self.dlgSector.hide()
        
    def on_btnCancelar_clicked(self, btn=None):
        self.dlgSector.hide()
        
if __name__ == '__main__':
    cnx = connect("dbname=vina")
    #cnx.autocommit()
    sys.excepthook = debugwindow.show
    d = wnSector(cnx)
    
    gtk.main()
